package tables

// ExamPapers 试卷表。试卷由试题组成，所以这里只记录了试卷和考试的基本信息，题目信息由映射表提供
type ExamPapers struct {
	Id              int64  `json:"id,string" gorm:"primaryKey"`
	Code            string `json:"code"`                // 试卷编号
	StartTime       int64  `json:"startTime,string"`    // 最早的开始时间
	EndTime         int64  `json:"endTime,string"`      // 最晚的结束时间
	AllowRetest     bool   `json:"allowRetest"`         // 是否允许重考
	RetestTime      int    `json:"retestTime"`          // 允许重考的次数
	AllowSwitchPage bool   `json:"allowSwitchPage"`     //是否允许切屏
	SwitchPageNum   int    `json:"switchPageNum"`       //允许切屏的次数
	ExamDuration    int64  `json:"examDuration,string"` // 考试总时长
	MustDuration    int64  `json:"mustDuration,string"` // 多少时间前不能交卷
	Status          int    `json:"status"`              //试卷状态，1-暂存，2-完成，3-发布，4-作废
	AutoCreateInfo
}

func (r *ExamPapers) TableName() string {
	return "lms_exampapers"
}

// MapExamQuestions 试卷关联题库表
type MapExamQuestions struct {
	Id         int64
	ExamId     int64 //试卷id
	QuestionId int64 // 题目id
	// 下面是试题的缓存信息，试卷来源于题库，但是允许出卷时调整题目数据和分值。
	// 完成出题后，题库中的数据被修改不会影响试卷
	Kind        int     `json:"kind"`            // 试题类型，可选：单选、多选、填空题、判断题、主观题
	Title       string  `json:"title"`           // 题目
	SubTitle    string  `json:"subTitle"`        // 题目补充信息
	InputFun    int     `json:"inputFun"`        // 录入方式，1-录入，2-试卷导入
	Score       float64 `json:"score"`           // 分值
	Options     string  `json:"options"`         //选项
	Answer      string  `json:"answer"`          // 答案
	ScoringRule int     `json:"scoringRule"`     // 计分规则，1-全对给分；2-部分对，给补分；3-部分对，按对的数量*补分，但是最终得分不会超过当前题目的分值
	PartScore   float64 `json:"partScore"`       // 补分值，用户需要自己控制补分值，默认 （总分值-1)/选项数量
	HardLv      int     `json:"hardLv"`          // 难度，系统自动抽取题目时会用到
	Label       string  `json:"label"`           // 标签，扩展用能
	FolderId    int64   `json:"folderId,string"` // 目录id，
	AutoCreateInfo
}

func (r *MapExamQuestions) TableName() string {
	return "lms_exampaper_Map_question"
}
